local nl = require'luaNumeric'
require 'luaFDTD3D'
local plot = require "Q2DViewerEx"
require "Q3DViewer"

--===========================================================================--
--初始化参数
local SI={
	widgets={};
	data={};
	scale = 20;
	set_settings_str = Gallop.set_settings_str;
	get_settings_str = Gallop.get_settings_str;
};
--===========================================================================--

--===========================================================================--
--创建表和创建元表
function SI:new (o)
	o = o or {};
	self.__index = self;
	setmetatable(o,self)
	o:init();
	return o;
end
--===========================================================================--

--===========================================================================--
--初始化
function SI:init ()

end
--===========================================================================--

--===========================================================================--
--获得数据
function SI:read_from_file (path)
	local widget = Gallop.DataPost:create_data_table_to_ui();
	--print(path)
	widget:load_data( path )
	local data = nl.new_eigen_matrix()
	widget:get_data(data)
	self.t = data:col(1):to_std_vector()
	self.sig = data:col(2):to_std_vector()
	local view = self:get_tran_view();
	view:addGraph(self.t,self.sig,'signal');
	view:rescaleAxes();
	Gallop.View.view = view;
	Gallop.View:init_2dplot('时间[ns]','端口电压[V/m]')
end
--===========================================================================--

--===========================================================================--
--眼图分析
function SI:si_analysis ()
	print(self:get_path())
	path = self:get_path();
	local xx,yy,yy1,yy2 = self:si_solve(path);
	print(#xx,#yy,#yy1,#yy2)
	local view = self:get_tran_view();
	view:clearGraphs()
	view:addGraph(xx*1e9,yy,'input');
	view:addGraph(xx*1e9,yy1,'output1');
	view:addGraph(xx*1e9,yy2,'output2');
	view:rescaleAxes();
	Gallop.View.view = view;
	Gallop.View:init_2dplot('时间[ns]','端口电压[V/m]')
end
--===========================================================================--

--===========================================================================--
--眼图分析
function SI:si_analysis ()
	path = self:get_path();
	local xx,yy,yy1,yy2 = self:si_solve(path);
	--print(#xx,#yy,#yy1,#yy2)
	local view = self:get_tran_view();
	view:clearGraphs()
	view:addGraph(xx*1e9,yy,'input');
	view:addGraph(xx*1e9,yy1,'output1');
	view:addGraph(xx*1e9,yy2,'output2');
	view:rescaleAxes();
	Gallop.View.view = view;
	Gallop.View:init_2dplot('时间[ns]','端口电压[V/m]')
end
--===========================================================================--

--===========================================================================--
--通信分析
function SI:si_comm_analysis ()
	path = self:get_path();
	local xx,yy,yy1,yy2 = self:si_comm_solve(path,50,50);
	--print(#xx,#yy,#yy1,#yy2)
	local view = self:get_eye_view();
	view:clearGraphs()
	view:addGraph(xx*1e9,yy,'input');
	view:addGraph(xx*1e9,yy1,'output1');
	--view:addGraph(xx*1e9,yy2,'output2');
	view:rescaleAxes();
	Gallop.View.view = view;
	Gallop.View:init_2dplot('时间[ns]','端口电压[V/m]')
end
--===========================================================================--

--===========================================================================--
--灵敏度分析
function SI:si_sen_analysis ()
	path = self:get_path();
	local xx1,yy1,xx2,yy2 = self:si_sen_solve(path,50,50,100);
	local view = self:get_eye_view();
	view:clearGraphs()
	view:addGraph(xx1*1e9,yy1,'output1');
	view:addGraph(xx2*1e9,yy2,'output2');
	view:rescaleAxes();
	Gallop.View.view = view;
	Gallop.View:init_2dplot('时间[ns]','端口电压[V/m]')
end
--===========================================================================--

return SI;
